home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / magazi~1 / 363 / flagtriv.c < prev    next >
C/C++ Source or Header  |  1989-02-05  |  26KB  |  1,337 lines

  1. /*----        FLAGTRIV.C        Version 1   Revision 12/29/86
  2.  
  3.           by Michael Rupertus
  4.  
  5.  
  6.  
  7.     note:  This program was developed using Alcyon C  version 4.14
  8. ----*/
  9.  
  10. #include <stdio.h>
  11. #include <osbind.h>
  12. #include <flagdata.h>
  13. #include <instruct.h>
  14.  
  15. #define    XOFFSET    27
  16. #define    YOFFSET    45
  17.  
  18. #define PLAYER_ONE 1
  19. #define PLAYER_TWO 2
  20.  
  21.  
  22. long    main_screen, secondary_screen, time, score_1, score_2;
  23.  
  24. int    contrl[12], intin[256], ptsin[256], intout[256], ptsout[256],
  25.     h, j, work_in[10], work_out[57], flags_shown[100],
  26.     rgb[4], pxy[12], gr_1, gr_2, gr_3, gr_4, number_of_players,
  27.     game_over, cindex, place, did_quess, rounds, draw_in_black,
  28.     black[] = { 0,0,0 }, bkgrnd[] = { 375,250,375 }, x, y, ctry,
  29.     difficulty, speed[] = { 0,401,251,151 }, *dp, *da[100];
  30.  
  31. char    get_ready_screen[32768], scr_1_string[7], scr_2_string[7],
  32.     medium_message[] = {"[3][|You must use low resolution!] Confirmed]"},
  33.     mono_message[] = {"[3][|You must use a color monitor!] Confirmed]"},
  34.     *na[100];
  35.  
  36. main()
  37. {
  38.     open_workstation();
  39.  
  40.     switch( Getrez() )
  41.            {
  42.          case 0:
  43.              {
  44.                palette_handler();
  45.                init_arrays();
  46.                play();
  47.                palette_handler();
  48.                break;
  49.          }
  50.  
  51.          case 1:
  52.              {
  53.                form_alert( 1, medium_message );
  54.                break;
  55.          }
  56.  
  57.          case 2:
  58.              {
  59.                form_alert( 1, mono_message );
  60.          }
  61.     }
  62.  
  63.     close_workstation();
  64. }
  65.  
  66.  
  67. open_workstation()
  68. {
  69.     appl_init();
  70.     h = graf_handle( &gr_1, &gr_2, &gr_3, &gr_4 );
  71.     for( j = 0;  j < 10;  work_in[j++] = 1 ) ;  work_in[10] = 2;
  72.     v_opnvwk( work_in, &h, work_out );
  73.     graf_mouse( 256, 0L );
  74.     v_clrwk( h );
  75. }
  76.  
  77.  
  78. close_workstation()
  79. {
  80.     graf_mouse( 257, 0L );
  81.     v_clsvwk( h );
  82.     appl_exit();
  83. }
  84.  
  85.  
  86. palette_handler()
  87. {
  88. static int hold_palette[16],
  89.        default_palette[16][3] =
  90.                 {
  91.                 {    1000,    1000,    1000    },
  92.                 {    1000,       0,       0    },
  93.                 {       0,    1000,       0    },
  94.                 {    1000,    1000,       0    },
  95.                 {       0,       0,    1000    },
  96.                 {    1000,       0,    1000    },
  97.                 {       0,    1000,    1000    },
  98.                 {     750,     750,     750    },
  99.                 {     500,     500,     500    },
  100.                 {    1000,     500,     500    },
  101.                 {     500,    1000,     500    },
  102.                 {    1000,    1000,     500    },
  103.                 {     500,     500,    1000    },
  104.                 {    1000,     500,    1000    },
  105.                 {     500,    1000,    1000    },
  106.                 {       0,       0,       0    }
  107.                                 };
  108.  
  109.     if( game_over == TRUE )
  110.        {
  111.          Setpalette( hold_palette );
  112.     }
  113.     else {
  114.            for( j = 0;  j < 16;  ++j )
  115.            {
  116.              hold_palette[j] = Setcolor( j, -1 );
  117.            }
  118.  
  119.            for( x = 0;  x < 16;  ++x )
  120.            {
  121.              for( y = 0;  y < 3;  ++y )
  122.              {
  123.                rgb[y] = default_palette[x][y];
  124.              }
  125.  
  126.              vs_color( h, x, rgb );
  127.            }
  128.     }
  129. }
  130.  
  131.  
  132. play()
  133. {
  134.     show_title();
  135.  
  136.     while( game_over == FALSE )
  137.           {
  138.         for( j = 0;  j < 100;  flags_shown[j++] = 0 ) ;
  139.  
  140.         score_1=score_2=rounds = 0;
  141.  
  142.         go_for_awhile();
  143.     }
  144. }
  145.  
  146.  
  147. init_arrays()
  148. {
  149.     da[ 0] = d_00;    na[ 0] = n_00;
  150.     da[ 1] = d_01;    na[ 1] = n_01;
  151.     da[ 2] = d_02;    na[ 2] = n_02;
  152.     da[ 3] = d_03;    na[ 3] = n_03;
  153.     da[ 4] = d_04;    na[ 4] = n_04;
  154.     da[ 5] = d_05;    na[ 5] = n_05;
  155.     da[ 6] = d_06;    na[ 6] = n_06;
  156.     da[ 7] = d_07;    na[ 7] = n_07;
  157.     da[ 8] = d_08;    na[ 8] = n_08;
  158.     da[ 9] = d_09;    na[ 9] = n_09;
  159.     da[10] = d_10;    na[10] = n_10;
  160.     da[11] = d_11;    na[11] = n_11;
  161.     da[12] = d_12;    na[12] = n_12;
  162.     da[13] = d_13;    na[13] = n_13;
  163.     da[14] = d_14;    na[14] = n_14;
  164.     da[15] = d_15;    na[15] = n_15;
  165.     da[16] = d_16;    na[16] = n_16;
  166.     da[17] = d_17;    na[17] = n_17;
  167.     da[18] = d_18;    na[18] = n_18;
  168.     da[19] = d_19;    na[19] = n_19;
  169.     da[20] = d_20;    na[20] = n_20;
  170.     da[21] = d_21;    na[21] = n_21;
  171.     da[22] = d_22;    na[22] = n_22;
  172.     da[23] = d_23;    na[23] = n_23;
  173.     da[24] = d_24;    na[24] = n_24;
  174.     da[25] = d_25;    na[25] = n_25;
  175.     da[26] = d_26;    na[26] = n_26;
  176.     da[27] = d_27;    na[27] = n_27;
  177.     da[28] = d_28;    na[28] = n_28;
  178.     da[29] = d_29;    na[29] = n_29;
  179.     da[30] = d_30;    na[30] = n_30;
  180.     da[31] = d_31;    na[31] = n_31;
  181.     da[32] = d_32;    na[32] = n_32;
  182.     da[33] = d_33;    na[33] = n_33;
  183.     da[34] = d_34;    na[34] = n_34;
  184.     da[35] = d_35;    na[35] = n_35;
  185.     da[36] = d_36;    na[36] = n_36;
  186.     da[37] = d_37;    na[37] = n_37;
  187.     da[38] = d_38;    na[38] = n_38;
  188.     da[39] = d_39;    na[39] = n_39;
  189.     da[40] = d_40;    na[40] = n_40;
  190.     da[41] = d_41;    na[41] = n_41;
  191.     da[42] = d_42;    na[42] = n_42;
  192.     da[43] = d_43;    na[43] = n_43;
  193.     da[44] = d_44;    na[44] = n_44;
  194.     da[45] = d_45;    na[45] = n_45;
  195.     da[46] = d_46;    na[46] = n_46;
  196.     da[47] = d_47;    na[47] = n_47;
  197.     da[48] = d_48;    na[48] = n_48;
  198.     da[49] = d_49;    na[49] = n_49;
  199.     da[50] = d_50;    na[50] = n_50;
  200.     da[51] = d_51;    na[51] = n_51;
  201.     da[52] = d_52;    na[52] = n_52;
  202.     da[53] = d_53;    na[53] = n_53;
  203.     da[54] = d_54;    na[54] = n_54;
  204.     da[55] = d_55;    na[55] = n_55;
  205.     da[56] = d_56;    na[56] = n_56;
  206.     da[57] = d_57;    na[57] = n_57;
  207.     da[58] = d_58;    na[58] = n_58;
  208.     da[59] = d_59;    na[59] = n_59;
  209.     da[60] = d_60;    na[60] = n_60;
  210.     da[61] = d_61;    na[61] = n_61;
  211.     da[62] = d_62;    na[62] = n_62;
  212.     da[63] = d_63;    na[63] = n_63;
  213.     da[64] = d_64;    na[64] = n_64;
  214.     da[65] = d_65;    na[65] = n_65;
  215.     da[66] = d_66;    na[66] = n_66;
  216.     da[67] = d_67;    na[67] = n_67;
  217.     da[68] = d_68;    na[68] = n_68;
  218.     da[69] = d_69;    na[69] = n_69;
  219.     da[70] = d_70;    na[70] = n_70;
  220.     da[71] = d_71;    na[71] = n_71;
  221.     da[72] = d_72;    na[72] = n_72;
  222.     da[73] = d_73;    na[73] = n_73;
  223.     da[74] = d_74;    na[74] = n_74;
  224.     da[75] = d_75;    na[75] = n_75;
  225.     da[76] = d_76;    na[76] = n_76;
  226.     da[77] = d_77;    na[77] = n_77;
  227.     da[78] = d_78;    na[78] = n_78;
  228.     da[79] = d_79;    na[79] = n_79;
  229.     da[80] = d_80;    na[80] = n_80;
  230.     da[81] = d_81;    na[81] = n_81;
  231.     da[82] = d_82;    na[82] = n_82;
  232.     da[83] = d_83;    na[83] = n_83;
  233.     da[84] = d_84;    na[84] = n_84;
  234.     da[85] = d_85;    na[85] = n_85;
  235.     da[86] = d_86;    na[86] = n_86;
  236.     da[87] = d_87;    na[87] = n_87;
  237.     da[88] = d_88;    na[88] = n_88;
  238.     da[89] = d_89;    na[89] = n_89;
  239.     da[90] = d_90;    na[90] = n_90;
  240.     da[91] = d_91;    na[91] = n_91;
  241.     da[92] = d_92;    na[92] = n_92;
  242.     da[93] = d_93;    na[93] = n_93;
  243.     da[94] = d_94;    na[94] = n_94;
  244.     da[95] = d_95;    na[95] = n_95;
  245.     da[96] = d_96;    na[96] = n_96;
  246.     da[97] = d_97;    na[97] = n_97;
  247.     da[98] = d_98;    na[98] = n_98;
  248.     da[99] = d_99;    na[99] = n_99;
  249. }
  250.  
  251.  
  252. show_title()
  253. {
  254.     main_screen = Logbase();
  255.     secondary_screen = ( 0xffff00 & (long)get_ready_screen )+0x0100;
  256.  
  257.     Setscreen( -1L, secondary_screen, -1 );
  258.  
  259.     show_flag();
  260.  
  261.     vsf_color( h, 4 );
  262.     v_contourfill( h, 30, 50, -1 );
  263.  
  264.     vst_height( h, 12, &gr_1, &gr_2, &gr_3, &gr_4 );
  265.  
  266.     rgb[0] = 1000;  rgb[1] = 500;  rgb[2] = 0;
  267.     vs_color( h, 12, rgb );
  268.     vst_color( h, 12 );
  269.     vst_effects( h, 5 );
  270.     vswr_mode( h, 2 );
  271.  
  272.     v_gtext( h, 65, 87, "FLAG TRIVIA" );
  273.  
  274.     vst_height( h, 6, &gr_1, &gr_2, &gr_3, &gr_4 );
  275.  
  276.     rgb[0] = 625;  rgb[1] = 0;  rgb[2] = 625;
  277.     vs_color( h, 13, rgb );
  278.     vst_color( h, 13 );
  279.     vst_effects( h, 0 );
  280.  
  281.     v_gtext( h, 135, 110, "by" );
  282.  
  283.     vst_height( h, 9, &gr_1, &gr_2, &gr_3, &gr_4 );
  284.     vst_effects( h, 2 );
  285.  
  286.     v_gtext( h, 52, 140, "MICHAEL RUPERTUS" );
  287.  
  288.     Setscreen( secondary_screen, main_screen, -1 );
  289.  
  290.     vsf_interior( h, 2 );
  291.     vsf_style( h, 9 );
  292.     rgb[0] = 1000;  rgb[1]=rgb[2] = 0;
  293.     vs_color( h, 14, rgb );
  294.     vsf_color( h, 14 );
  295.     v_contourfill( h, 0, 0, -1 );
  296.     vsf_interior( h, 1 );
  297.  
  298.     vst_height( h, 60, &gr_1, &gr_2, &gr_3, &gr_4 );
  299.     vst_effects( h, 33 );
  300.     vst_color( h, 4 );
  301.  
  302.     v_gtext( h, 80,  100, "GET" );
  303.     v_gtext( h, 140, 130, "READY!" );
  304.  
  305.     vst_height( h, 7, &gr_1, &gr_2, &gr_3, &gr_4 );
  306.     vst_effects( h, 4 );
  307.     vst_color( h, 2 );
  308.     vst_rotation( h, 900 );
  309.     v_gtext( h, 310, 190, "Kilroy" );
  310.     v_gtext( h, 310, 123, "was" );
  311.     v_gtext( h, 310,  86, "here!" );
  312.     vst_rotation( h, 0 );
  313.     vst_height( h, 6, &gr_1, &gr_2, &gr_3, &gr_4 );
  314.  
  315.     Setscreen( main_screen, -1L, -1 );
  316.  
  317.     v_gtext( h, 65, 183, "Press any key to play" );
  318.     Cnecin();
  319.  
  320.     draw_in_black = TRUE;
  321.     erase_a_flag();
  322.     draw_in_black = FALSE;
  323.  
  324.     vst_height( h, 7, &gr_1, &gr_2, &gr_3, &gr_4 );
  325.     v_gtext( h, 30, 90, "Do you need instructions?" );
  326.     v_gtext( h, 90, 120, "Press Y or N" );
  327.  
  328.     for( j = 0;  j != 'y'  &&  j != 'Y'  &&  j != 'n'  &&  j != 'N'; )
  329.         {
  330.           j = (int)Bconin( 2 );
  331.     }
  332.  
  333.     if( j == 'y'  ||  j == 'Y' )
  334.        {
  335.          show_instructions();
  336.     }
  337.  
  338.     erase_a_flag();
  339.  
  340.     vst_height( h, 8, &gr_1, &gr_2, &gr_3, &gr_4 );
  341.     v_gtext( h, 45, 100, "How many will play?" );
  342.     vst_height( h, 6, &gr_1, &gr_2, &gr_3, &gr_4 );
  343.     v_gtext( h, 60, 140, "Press 1 or 2" );
  344.     vst_height( h,  6, &gr_1, &gr_2, &gr_3, &gr_4 );
  345.  
  346.     for( j = 0;  j != '1'  &&  j != '2'; )
  347.         {
  348.           j = (int)Bconin( 2 );
  349.     }
  350.  
  351.     number_of_players = j-48;
  352.  
  353.     draw_in_black = TRUE;
  354.     erase_a_flag();
  355.  
  356.     vst_height( h, 8, &gr_1, &gr_2, &gr_3, &gr_4 );
  357.     v_gtext( h, 50, 100, "Select skill level:" );
  358.     vst_height( h, 6, &gr_1, &gr_2, &gr_3, &gr_4 );
  359.  
  360.     vst_color( h, 11 );
  361.     v_gtext( h, 112, 120, "1 =" );
  362.     v_gtext( h, 112, 130, "2 =" );
  363.     v_gtext( h, 112, 140, "3 =" );
  364.  
  365.     vst_color( h, 12 );
  366.     v_gtext( h, 144, 120, "Slow" );
  367.     v_gtext( h, 144, 130, "Quick" );
  368.     v_gtext( h, 144, 140, "Fast" );
  369.  
  370.     for( j = 0;  j != '1'  &&  j != '2'  &&  j != '3'; )
  371.         {
  372.           j = (int)Bconin( 2 );
  373.     }
  374.  
  375.     difficulty = j-48;
  376.  
  377.     draw_in_black = FALSE;
  378.     erase_a_flag();
  379.     vswr_mode( h, 1 );
  380. }
  381.  
  382.  
  383. show_instructions()
  384. {
  385. int index, line;
  386.  
  387.     rgb[0] = 0;  rgb[1] = 750;  rgb[2] = 0;
  388.     vs_color( h, 10, rgb );
  389.  
  390.     rgb[0] = 1000;  rgb[1]= 0;
  391.     vs_color( h, 11, rgb );
  392.  
  393.     draw_in_black = TRUE;
  394.  
  395.     for( index=j = 0;  j < 5;  ++j )
  396.         {
  397.           vst_color( h, 11 );
  398.  
  399.           erase_a_flag();
  400.  
  401.           y = y_start[j];
  402.  
  403.           for( line = 0;  line < lines_to_show[j];  ++line, y += 12 )
  404.           {
  405.             x = 144-(10*(strlen( &instructions[index][0] )/2));
  406.  
  407.             v_gtext( h, x, y, &instructions[index++][0] );
  408.           }
  409.  
  410.           vst_color( h, 10 );
  411.           vst_height( h, 6, &gr_1, &gr_2, &gr_3, &gr_4 );
  412.           v_gtext( h, 45, 180, press_to_continue );
  413.           vst_height( h, 8, &gr_1, &gr_2, &gr_3, &gr_4 );
  414.           Cnecin();
  415.     }
  416.  
  417.     draw_in_black = FALSE;
  418. }
  419.  
  420.  
  421. show_flag()
  422. {
  423. static    int flag_outline[] = { 25,42,26,42, 25,43,26,43, 26,44,27,44,
  424.                    26,45,267,45, 267,45,267,186, 267,186,27,186,
  425.                    27,186,27,45 };
  426.  
  427.     vs_color( h, 0, bkgrnd );
  428.  
  429.     vs_color( h, 1, black );
  430.  
  431.     rgb[0]=rgb[1]=rgb[2] = 1000;
  432.     vs_color( h, 4, rgb );
  433.  
  434.         /*---- Draw vertical part of pole ----*/
  435.  
  436.     pxy[0] = 12;  pxy[1] = 199;  pxy[2] = 12;  pxy[3] = 42;
  437.     v_pline( h, 2, pxy );
  438.  
  439.     pxy[0] = 13;  pxy[1] = 199;  pxy[2] = 13;  pxy[3] = 42;
  440.     v_pline( h, 2, pxy );
  441.  
  442.     pxy[0] = 22;  pxy[1] = 199;  pxy[2] = 22;  pxy[3] = 42;
  443.     v_pline( h, 2, pxy );
  444.  
  445.     pxy[0] = 23;  pxy[1] = 199;  pxy[2] = 23;  pxy[3] = 42;
  446.     v_pline( h, 2, pxy );
  447.  
  448.         /*------------------------------------*/
  449.  
  450.  
  451.         /*---- Draw upper part of pole ----*/
  452.  
  453.     pxy[0] = 9;  pxy[1] = 41;  pxy[2] = 26;  pxy[3] = 41;
  454.     v_pline( h, 2, pxy );
  455.  
  456.     pxy[0] = 9;  pxy[1] = 40;  pxy[2] = 26;  pxy[3] = 40;
  457.     v_pline( h, 2, pxy );
  458.  
  459.     pxy[0] = 9;  pxy[1] = 39;  pxy[2] = 9;  pxy[3] = 37;
  460.     v_pline( h, 2, pxy );
  461.  
  462.     pxy[0] = 10;  pxy[1] = 39;  pxy[2] = 10;  pxy[3] = 37;
  463.     v_pline( h, 2, pxy );
  464.  
  465.     pxy[0] = 25;  pxy[1] = 39;  pxy[2] = 25;  pxy[3] = 37;
  466.     v_pline( h, 2, pxy );
  467.  
  468.     pxy[0] = 26;  pxy[1] = 39;  pxy[2] = 26;  pxy[3] = 37;
  469.     v_pline( h, 2, pxy );
  470.  
  471.     pxy[0] = 9;  pxy[1] = 36;  pxy[2] = 26;  pxy[3] = 36;
  472.     v_pline( h, 2, pxy );
  473.  
  474.     pxy[0] = 9;  pxy[1] = 35;  pxy[2] = 26;  pxy[3] = 35;
  475.     v_pline( h, 2, pxy );
  476.  
  477.         /*---------------------------------*/
  478.  
  479.  
  480.         /*---- Draw flag outline ----*/
  481.  
  482.     v_pline( h, 14, flag_outline );
  483.  
  484.     pxy[0] = 27;  pxy[1] = 186;  pxy[2] = 27;  pxy[3] = 199;
  485.     v_pline( h, 2, pxy );
  486.  
  487.         /*---------------------------*/
  488.  
  489.  
  490.         /*---- Draw gold ball on top of the pole ----*/
  491.  
  492.     rgb[0] = 875;  rgb[1] = 500;  rgb[2] = 0;
  493.     vs_color( h, 2, rgb );
  494.     vsl_color( h, 2 );
  495.  
  496.     pxy[0] = 15;  pxy[1] = 34;  pxy[2] = 20;  pxy[3] = 34;
  497.     v_pline( h, 2, pxy );
  498.  
  499.     pxy[0] = 14;  pxy[1] = 33;  pxy[2] = 21;  pxy[3] = 33;
  500.     v_pline( h, 2, pxy );
  501.  
  502.     pxy[0] = 14;  pxy[1] = 32;  pxy[2] = 21;  pxy[3] = 32;
  503.     v_pline( h, 2, pxy );
  504.  
  505.     pxy[0] = 14;  pxy[1] = 31;  pxy[2] = 21;  pxy[3] = 31;
  506.     v_pline( h, 2, pxy );
  507.  
  508.     pxy[0] = 14;  pxy[1] = 30;  pxy[2] = 21;  pxy[3] = 30;
  509.     v_pline( h, 2, pxy );
  510.  
  511.     pxy[0] = 15;  pxy[1] = 29;  pxy[2] = 20;  pxy[3] = 29;
  512.     v_pline( h, 2, pxy );
  513.  
  514.     pxy[0] = 16;  pxy[1] = 28;  pxy[2] = 19;  pxy[3] = 28;
  515.     v_pline( h, 2, pxy );
  516.  
  517.         /*--------------------------*/
  518.  
  519.  
  520.         /*---- Fill the pole with silver ----*/
  521.  
  522.     rgb[0]=rgb[1]=rgb[2] = 875;
  523.     vs_color( h, 3, rgb );
  524.     vsf_color( h, 3 );
  525.  
  526.     v_contourfill( h, 14, 199, -1 );
  527.     v_contourfill( h, 14,  39, -1 );
  528. }
  529.  
  530.  
  531. draw_a_flag()
  532. {
  533.     while( *dp != DONE )
  534.           {
  535.         switch( *dp )
  536.                {
  537.              case    NEW:
  538.              case   MORE:
  539.                       {
  540.                     do_lines();
  541.                     break;
  542.              }
  543.  
  544.              case   FILL:
  545.              case  MFILL:
  546.                       {
  547.                     do_fill();
  548.                     break;
  549.              }
  550.  
  551.              case CIRCLE:
  552.                       {
  553.                     do_circle();
  554.                     break;
  555.              }
  556.  
  557.              case    ARC:
  558.                       {
  559.                     do_arc();
  560.                     break;
  561.              }
  562.  
  563.  
  564.              case ELLARC:
  565.                       {
  566.                     do_ellarc();
  567.                     break;
  568.              }
  569.         }
  570.  
  571.             ++dp;
  572.     }
  573. }
  574.  
  575.  
  576. do_lines()
  577. {
  578. register int j, draw_color, pairs;
  579. int temp_data[100];
  580.  
  581.     if( *dp == NEW )
  582.        {
  583.          draw_color = *++dp;
  584.  
  585.          rgb[0] = *++dp;
  586.          rgb[1] = *++dp;
  587.          rgb[2] = *++dp;
  588.  
  589.          vs_color( h, draw_color, rgb );
  590.          vsl_color( h, draw_color );
  591.     }
  592.  
  593.     pairs = *++dp;
  594.  
  595.     for( j = 0;  j < pairs * 2;  temp_data[j++] = *++dp ) ;
  596.  
  597.     v_pline( h, pairs, temp_data );
  598. }
  599.  
  600.  
  601. do_fill()
  602. {
  603. register int reg, x_start, y_start;
  604.  
  605.     if( *dp == FILL )
  606.        {
  607.          reg = *++dp;
  608.  
  609.          rgb[0] = *++dp;
  610.          rgb[1] = *++dp;
  611.          rgb[2] = *++dp;
  612.  
  613.          vs_color( h, reg, rgb );
  614.          vsf_color( h, reg );
  615.     }
  616.  
  617.     x_start = *++dp;
  618.     y_start = *++dp;
  619.  
  620.     v_contourfill( h, x_start, y_start, -1 );
  621. }
  622.  
  623.  
  624. do_circle()
  625. {
  626. register int reg, x_center, y_center, radius;
  627.  
  628.     reg = *++dp;
  629.  
  630.     rgb[0] = *++dp;
  631.     rgb[1] = *++dp;
  632.     rgb[2] = *++dp;
  633.     vs_color( h, reg, rgb );
  634.     vsf_color( h, reg );
  635.  
  636.     x_center = *++dp;
  637.     y_center = *++dp;
  638.     radius = *++dp;
  639.  
  640.     v_circle( h, x_center, y_center, radius );
  641. }
  642.  
  643.  
  644. do_arc()
  645. {
  646. register int x_center, y_center, begang, endang, radius;
  647. int reg;
  648.  
  649.     reg = *++dp;
  650.  
  651.     rgb[0] = *++dp;
  652.     rgb[1] = *++dp;
  653.     rgb[2] = *++dp;
  654.     vs_color( h, reg, rgb );
  655.     vsl_color( h, reg );
  656.  
  657.     x_center = *++dp;
  658.     y_center = *++dp;
  659.     begang = *++dp;
  660.     endang = *++dp;
  661.     radius = *++dp;
  662.  
  663.     v_arc( h, x_center, y_center, begang, endang, radius );
  664. }
  665.  
  666.  
  667. do_ellarc()
  668. {
  669. register int x_center, y_center, x_radius, y_radius, begang;
  670. int endang, reg;
  671.  
  672.     reg = *++dp;
  673.  
  674.     rgb[0] = *++dp;
  675.     rgb[1] = *++dp;
  676.     rgb[2] = *++dp;
  677.     vs_color( h, reg, rgb );
  678.     vsl_color( h, reg );
  679.  
  680.     x_center = *++dp;
  681.     y_center = *++dp;
  682.     x_radius = *++dp;
  683.     y_radius = *++dp;
  684.     begang = *++dp;
  685.     endang = *++dp;
  686.  
  687.     v_ellarc( h, x_center, y_center, x_radius, y_radius, begang, endang );
  688. }
  689.  
  690.  
  691. erase_a_flag()
  692. {
  693.     if( draw_in_black == TRUE )
  694.        {
  695.          vs_color( h, 8, black );
  696.          vsl_color( h, 8 );
  697.     }
  698.     else {
  699.            vsl_color( h, 4 );
  700.     }
  701.  
  702.     switch( (int)(Random() & 3) )
  703.            {
  704.          case 0:
  705.              {
  706.                out_box();
  707.                break;
  708.          }
  709.  
  710.          case 1:
  711.              {
  712.                explode();
  713.                break;
  714.          }
  715.  
  716.          case 2:
  717.              {
  718.                implode();
  719.                break;
  720.          }
  721.  
  722.          case 3:
  723.              {
  724.                in_box();
  725.          }
  726.  
  727.     }
  728. }
  729.  
  730.  
  731. implode()
  732. {
  733. int xy_l[4], xy_r[4];
  734.  
  735.     xy_l[0] = 1+XOFFSET;  xy_l[1] = 1+YOFFSET;
  736.     xy_l[2] = xy_l[0];    xy_l[3] = 140+YOFFSET;
  737.  
  738.     xy_r[0] = 239+XOFFSET;  xy_r[1] = 1+YOFFSET;
  739.     xy_r[2] = xy_r[0];      xy_r[3] = 140+YOFFSET;
  740.  
  741.     while( xy_l[0] < (121+XOFFSET) )
  742.           {
  743.         v_pline( h, 2, xy_l );
  744.         v_pline( h, 2, xy_r );
  745.  
  746.         ++xy_l[0];  ++xy_l[2];
  747.         --xy_r[0];  --xy_r[2];
  748.     }
  749. }
  750.  
  751.  
  752. explode()
  753. {
  754. int xy_l[4], xy_r[4];
  755.  
  756.     xy_l[0] = 120+XOFFSET;
  757.     xy_l[1] = 1+YOFFSET;
  758.     xy_l[2] = xy_l[0];
  759.     xy_l[3] = 140+YOFFSET;
  760.  
  761.     xy_r[0] = xy_l[0];
  762.     xy_r[1] = xy_l[1];
  763.     xy_r[2] = xy_l[2];
  764.     xy_r[3] = xy_l[3];
  765.  
  766.     while( xy_l[0] > XOFFSET )
  767.           {
  768.         v_pline( h, 2, xy_l );
  769.         v_pline( h, 2, xy_r );
  770.  
  771.         --xy_l[0];  --xy_l[2];
  772.         ++xy_r[0];  ++xy_r[2];
  773.     }
  774. }
  775.  
  776.  
  777. out_box()
  778. {
  779. int square[12];
  780.  
  781.     pxy[0] = 70+XOFFSET;
  782.     pxy[1] = 70+YOFFSET;
  783.     pxy[2] = pxy[0];
  784.     pxy[3] = pxy[1]+1;
  785.  
  786.     for( ;  pxy[0] < (171+XOFFSET);  ++pxy[0], ++pxy[2] )
  787.         {
  788.           v_pline( h, 2, pxy );
  789.     }
  790.  
  791.     square[0] = 69+XOFFSET;
  792.     square[1] = pxy[1]-1;
  793.  
  794.     square[2] = pxy[2];
  795.     square[3] = square[1];
  796.  
  797.     square[4] = square[2];
  798.     square[5] = pxy[3]+1;
  799.  
  800.     square[6] = square[0];
  801.     square[7] = square[5];
  802.  
  803.     square[8] = square[0];
  804.     square[9] = square[1];
  805.  
  806.     while( (square[0] > XOFFSET) && (square[1] > YOFFSET) )
  807.           {
  808.         v_pline( h, 5, square );
  809.  
  810.         --square[0];
  811.         --square[1];
  812.  
  813.         ++square[2];
  814.         --square[3];
  815.  
  816.         ++square[4];
  817.         ++square[5];
  818.  
  819.         --square[6];
  820.         ++square[7];
  821.  
  822.         --square[8];
  823.         --square[9];
  824.  
  825.         delay( 2500L );
  826.     }
  827. }
  828.  
  829.  
  830. in_box()
  831. {
  832. int square[12];
  833.  
  834.     square[0] = 1+XOFFSET;
  835.     square[1] = 1+YOFFSET;
  836.  
  837.     square[2] = 239+XOFFSET;
  838.     square[3] = 1+YOFFSET;
  839.  
  840.     square[4] = square[2];
  841.     square[5] = 140+YOFFSET;
  842.  
  843.     square[6] = square[0];
  844.     square[7] = square[5];
  845.  
  846.     square[8] = square[0];
  847.     square[9] = square[1];
  848.  
  849.     while( square[1] < (71+YOFFSET) )
  850.           {
  851.             v_pline( h, 5, square );
  852.  
  853.             ++square[0];
  854.             ++square[1];
  855.  
  856.             --square[2];
  857.             ++square[3];
  858.  
  859.             --square[4];
  860.             --square[5];
  861.  
  862.             ++square[6];
  863.             --square[7];
  864.  
  865.             ++square[8];
  866.             ++square[9];
  867.  
  868.             delay( 2500L );
  869.     }
  870. }
  871.  
  872.  
  873. go_for_awhile()
  874. {
  875.     while( ++rounds < 21 )
  876.           {
  877.         while( Bconstat( 2 ) )        /* Flush keyboard buffer */
  878.               {
  879.             Bconin( 2 );
  880.         }
  881.  
  882.         select_a_new_flag();
  883.  
  884.         vs_color( h, 0, black );
  885.  
  886.         Setscreen( -1L, secondary_screen, -1 );
  887.  
  888.         draw_a_flag();
  889.  
  890.         show_countries();
  891.  
  892.         vst_height( h, 8, &gr_1, &gr_2, &gr_3, &gr_4 );
  893.         v_gtext( h, 30, 41, "                           " );
  894.  
  895.         vs_color( h, 0, bkgrnd );
  896.  
  897.         Setscreen( -1L, main_screen, -1 );
  898.  
  899.         countdown();
  900.  
  901.         erase_a_flag();
  902.     }
  903.  
  904.     draw_in_black = TRUE;
  905.     erase_a_flag();
  906.     draw_in_black = FALSE;
  907.  
  908.     vswr_mode( h, 2 );
  909.     v_gtext( h, 104, 80, "Game Over" );
  910.  
  911.     if( number_of_players == 2 )
  912.        {
  913.          if( score_1 > score_2 )
  914.         {
  915.           v_gtext( h, 72, 100, "Player one wins" );
  916.          }
  917.          else if( score_1 < score_2 )
  918.              {
  919.                v_gtext( h, 72, 100, "Player two wins" );
  920.           }
  921.           else {
  922.              v_gtext( h, 94, 100, "A tie game!" );
  923.           }
  924.     }
  925.  
  926.     v_gtext( h, 94, 120, "Play Again?" );
  927.     v_gtext( h, 84, 130, "Press Y or N" );
  928.     vswr_mode( h, 1 );
  929.  
  930.     for( j = 0;  j != 'y'  &&  j != 'Y'  &&  j != 'n'  &&  j != 'N'; )
  931.         {
  932.           j = (int)Bconin( 2 );
  933.     }
  934.  
  935.     if( j == 'y'  ||  j == 'Y' )
  936.        {
  937.          game_over = FALSE;
  938.     }
  939.     else {
  940.            game_over = TRUE;
  941.     }
  942.  
  943.     erase_a_flag();
  944. }
  945.  
  946.  
  947. select_a_new_flag()
  948. {
  949.     do
  950.       {
  951.         while( (cindex = (int)(Random() & 127)) > 99 ) ;
  952.     }
  953.     while( flags_shown[cindex] );
  954.  
  955.     flags_shown[cindex] = 1;
  956.  
  957.     dp = da[cindex];
  958. }
  959.  
  960.  
  961. countdown()
  962. {
  963. char time_string[5], round_string[5];
  964. int quess, j;
  965.  
  966.     j=did_quess = 0;
  967.     time = speed[difficulty];
  968.  
  969.     rgb[0]=rgb[1] = 0;  rgb[2] = 750;
  970.     vs_color( h, 12, rgb );
  971.     rgb[0] = 750;  rgb[2] = 375;
  972.     vs_color( h, 11, rgb );
  973.  
  974.     vst_color( h, 15 );
  975.     vst_effects( h, 32 );
  976.     v_gtext( h, 40, 199, "TIME" );
  977.     v_gtext( h, 160, 199, "ROUND" );
  978.  
  979.     vst_effects( h, 0 );
  980.     v_gtext( h, 87, 199, "=" );
  981.     v_gtext( h, 217, 199, "=" );
  982.  
  983.     vst_color( h, 4 );
  984.  
  985.     v_gtext( h, 230, 199, "  " );
  986.     sprintf( round_string, "%d", rounds );
  987.     v_gtext( h, 230, 199, round_string );
  988.  
  989.     while( --time )
  990.           {
  991.         if( time < 100 )
  992.            {
  993.              vst_color( h, 11 );
  994.         }
  995.  
  996.         sprintf( time_string, "%3ld", time );
  997.         v_gtext( h, 100, 199, time_string );
  998.  
  999.         if( (quess = poll_players()) > 0 )
  1000.            {
  1001.              if( quess < 5 )
  1002.             {
  1003.               j = check_quess( PLAYER_ONE, quess );
  1004.              }
  1005.              else if( number_of_players == 2 )
  1006.                  {
  1007.                    j = check_quess( PLAYER_TWO, quess-6 );
  1008.               }
  1009.  
  1010.              if( j )
  1011.                 {
  1012.                   return;
  1013.              }
  1014.         }
  1015.     }
  1016.  
  1017.     v_gtext( h, 123, 199, "0" );
  1018.  
  1019.     vst_color( h, 15 );
  1020.     vst_effects( h, 4 );
  1021.     v_gtext( h, 30, 41, "                      " );
  1022.     v_gtext( h, 110, 41, "Time's Up!!" );
  1023.     vst_effects( h, 0 );
  1024.  
  1025.     for( j = 20;  j > 0;  --j )
  1026.         {
  1027.           rgb[0] = (int)(Random() & 1023);
  1028.           vs_color( h, 11, rgb );
  1029.           delay( 38000L );
  1030.     }
  1031.  
  1032.     rgb[0] = 1000;
  1033.     vs_color( h, 11, rgb );
  1034.  
  1035.     show_score();
  1036. }
  1037.  
  1038.  
  1039. poll_players()
  1040. {
  1041.     if( Bconstat( 2 ) == 0 )
  1042.        {
  1043.          return( 0 );
  1044.     }
  1045.  
  1046.     switch( (int)(Bconin( 2 ) >> 16) )
  1047.            {
  1048.          case 59:  return( 1 );
  1049.          case 60:  return( 2 );
  1050.          case 61:  return( 3 );
  1051.          case 62:  return( 4 );
  1052.  
  1053.          case 65:  return( 7 );
  1054.          case 66:  return( 8 );
  1055.          case 67:  return( 9 );
  1056.          case 68:  return( 10 );
  1057.  
  1058.          default:  return( 0 );
  1059.     }
  1060. }
  1061.  
  1062.  
  1063. check_quess( player, quess )
  1064. int player, quess;
  1065. {
  1066.     if( player & did_quess )
  1067.        {
  1068.          return( 0 );
  1069.     }
  1070.  
  1071.     if( quess == place )
  1072.        {
  1073.          they_got_it( player );
  1074.          return( 1 );
  1075.     }
  1076.  
  1077.     did_quess |= player;
  1078.  
  1079.     if( did_quess == 3 )
  1080.        {
  1081.          vswr_mode( h, 2 );
  1082.          v_gtext( h, 42, 41, "Both of you are WRONG!" );
  1083.          vswr_mode( h, 1 );
  1084.          delay( 300000L );
  1085.          show_score();
  1086.          return( 1 );
  1087.     }
  1088.  
  1089.     if( number_of_players == 1 )
  1090.        {
  1091.          vswr_mode( h, 2 );
  1092.          v_gtext( h, 42, 41, "Sorry, you are WRONG!" );
  1093.          vswr_mode( h, 1 );
  1094.          delay( 300000L );
  1095.          show_score();
  1096.          return( 1 );
  1097.     }
  1098.  
  1099.     return( 0 );
  1100. }
  1101.  
  1102.  
  1103. they_got_it( player )
  1104. int player;
  1105. {
  1106.     if( player == PLAYER_ONE )
  1107.        {
  1108.          if( number_of_players == 1 )
  1109.         {
  1110.           v_gtext( h, 70, 41, "You are correct!" );
  1111.          }
  1112.          else {
  1113.             v_gtext( h, 42, 41, "Player one is right!" );
  1114.          }
  1115.  
  1116.          delay( 300000L );
  1117.          score_1 += 1000 + (difficulty * time);
  1118.     }
  1119.     else {
  1120.            v_gtext( h, 42, 41, "Player two is right!" );
  1121.            delay( 300000L );
  1122.            score_2 += 1000 + (difficulty * time);
  1123.     }
  1124.  
  1125.     for( j = 30;  j > 0;  --j )
  1126.         {
  1127.           rgb[0] = (int)(Random() & 1023);
  1128.           rgb[1] = (int)(Random() & 1023);
  1129.           rgb[2] = (int)(Random() & 1023);
  1130.           vs_color( h, 13, rgb );
  1131.  
  1132.           delay( 20000L );
  1133.     }
  1134.  
  1135.     rgb[0]=rgb[1]=rgb[2] = 1000;
  1136.     vs_color( h, 13, rgb );
  1137.     show_score();
  1138.     delay( 300000L );
  1139. }
  1140.  
  1141.  
  1142. show_score()
  1143. {
  1144.     v_gtext( h, 30, 41, "                       " );
  1145.  
  1146.     vst_color( h, 15 );
  1147.     v_gtext( h, 30, 41, "1P =" );
  1148.  
  1149.     vst_color( h, 4 );
  1150.     sprintf( scr_1_string, "%ld", score_1 );
  1151.     v_gtext( h, 80, 41, scr_1_string );
  1152.  
  1153.     if( number_of_players == 2 )
  1154.        {
  1155.          vst_color( h, 15 );
  1156.          v_gtext( h, 150, 41, "2P =" );
  1157.          sprintf( scr_2_string, "%ld", score_2 );
  1158.          vst_color( h, 4 );
  1159.          v_gtext( h, 200, 41, scr_2_string );
  1160.     }
  1161.  
  1162.     delay( 40000L );
  1163. }
  1164.  
  1165.  
  1166. show_countries()
  1167. {
  1168.         /*---- Draw text grid ----*/
  1169.  
  1170.     rgb[0] = 0;  rgb[1] = 625;  rgb[2] = 625;
  1171.     vs_color( h, 15, rgb );
  1172.     vsl_color( h, 15 );
  1173.     vsl_udsty( h, 21845 );        /* every other bit is on */
  1174.     vsl_type( h, 7 );
  1175.  
  1176.     pxy[0] = 0;  pxy[1] = 0;  pxy[2] = 319;  pxy[3] = 0;
  1177.     v_pline( h, 2, pxy );
  1178.  
  1179.     pxy[0] = 0;  pxy[1] = 11;  pxy[2] = 319;  pxy[3] = 11;
  1180.     v_pline( h, 2, pxy );
  1181.  
  1182.     pxy[0] = 0;  pxy[1] = 23;  pxy[2] = 319;  pxy[3] = 23;
  1183.     v_pline( h, 2, pxy );
  1184.  
  1185.     pxy[0] = 0;  pxy[1] = 0;  pxy[2] = 0;  pxy[3] = 23;
  1186.     v_pline( h, 2, pxy );
  1187.  
  1188.     pxy[0] = 160;  pxy[1] = 0;  pxy[2] = 160;  pxy[3] = 23;
  1189.     v_pline( h, 2, pxy );
  1190.  
  1191.     pxy[0] = 319;  pxy[1] = 0;  pxy[2] = 319;  pxy[3] = 23;
  1192.     v_pline( h, 2, pxy );
  1193.  
  1194.         /*--------------------------------*/
  1195.  
  1196.  
  1197.         /*---- Erase text areas ----*/
  1198.  
  1199.     vsl_color( h, 1 );
  1200.     vsl_type( h, 1 );
  1201.  
  1202.     pxy[0] = 159;  pxy[1] = 1;  pxy[2] = 159;  pxy[3] = 10;
  1203.  
  1204.     while( pxy[0] > 0 )            /* Area one */
  1205.           {
  1206.         v_pline( h, 2, pxy );
  1207.         --pxy[0];
  1208.         --pxy[2];
  1209.     }
  1210.  
  1211.     pxy[0] = 161;  pxy[1] = 1;  pxy[2] = 161;  pxy[3] = 10;
  1212.  
  1213.     while( pxy[0] < 319 )          /* Area two */
  1214.           {
  1215.         v_pline( h, 2, pxy );
  1216.         ++pxy[0];
  1217.         ++pxy[2];
  1218.     }
  1219.  
  1220.     pxy[0] = 159;  pxy[1] = 12;  pxy[2] = 159;  pxy[3] = 22;
  1221.  
  1222.     while( pxy[0] > 0 )            /* Area three */
  1223.           {
  1224.         v_pline( h, 2, pxy );
  1225.         --pxy[0];
  1226.         --pxy[2];
  1227.     }
  1228.  
  1229.     pxy[0] = 161;  pxy[1] = 12;  pxy[2] = 161;  pxy[3] = 22;
  1230.  
  1231.     while( pxy[0] < 319 )          /* Area four */
  1232.           {
  1233.         v_pline( h, 2, pxy );
  1234.         ++pxy[0];
  1235.         ++pxy[2];
  1236.     }
  1237.  
  1238.         /*-------------------------------------*/
  1239.  
  1240.     print_countries();
  1241. }
  1242.  
  1243.  
  1244. print_countries()
  1245. {
  1246. static int x_table[5][18] = {
  1247.  
  1248.     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  1249.  
  1250.     { 0,0,0,0,72,64,56,48,40,32,24,16,8,8,8,8,8 },
  1251.  
  1252.     { 0,0,0,0,232,224,216,208,200,192,184,176,168,168,168,168,168 },
  1253.  
  1254.     { 0,0,0,0,72,64,56,48,40,32,24,16,8,8,8,8,8 },
  1255.  
  1256.     { 0,0,0,0,232,224,216,208,200,192,184,176,168,168,168,168,168 } },
  1257.  
  1258.     y_table[] = { 0,8,8,20,20 };
  1259.  
  1260. char    str_array[5][18];
  1261.  
  1262. int    abcd[5], e, len;
  1263.  
  1264.     for( e = 1;  e < 5;  abcd[e++] = -1 );
  1265.  
  1266.     place = (int)(Random() & 3 );  ++place;
  1267.  
  1268.     strcpy( &str_array[place][0], na[cindex] );
  1269.  
  1270.     abcd[place] = cindex;
  1271.  
  1272.     for( j = 1;  j < 5;  ++j )
  1273.         {
  1274.           if( abcd[j] < 0 )
  1275.          {
  1276.            do
  1277.              {
  1278.                while( (ctry = (int)(Random() & 127)) > 99 ) ;
  1279.  
  1280.                for( e = 0, x = 1;  x < 5;  ++x )
  1281.                {
  1282.                  if( abcd[x] == ctry )
  1283.                        {
  1284.                   e = 1;
  1285.                  }
  1286.                }
  1287.  
  1288.             /*---- Indonesia & Monaco are identical ----*/
  1289.                if( (cindex == 42  &&  ctry == 64) ||
  1290.                (cindex == 64  &&  ctry == 42) )
  1291.               {
  1292.                 e = 1;
  1293.                }
  1294.            }
  1295.            while( e );
  1296.  
  1297.            abcd[j] = ctry;
  1298.  
  1299.            strcpy( &str_array[j][0], na[ctry] );
  1300.           }
  1301.     }
  1302.  
  1303.     rgb[0]=rgb[1] = 1000;  rgb[2] = 0;    /* Text color */
  1304.     vs_color( h, 5, rgb );
  1305.     vs_color( h, 13, rgb );
  1306.     vst_effects( h, 0 );
  1307.     vst_height( h, 6, &gr_1, &gr_2, &gr_3, &gr_4 );
  1308.     vswr_mode( h, 2 );
  1309.  
  1310.     for( j = 1;  j < 5;  ++j )
  1311.         {
  1312.           if( j == place )
  1313.          {
  1314.            vst_color( h, 13 );
  1315.           }
  1316.           else {
  1317.              vst_color( h, 5 );
  1318.           }
  1319.  
  1320.           len = strlen( &str_array[j][0] );
  1321.  
  1322.           v_gtext( h, x_table[j][len], y_table[j], &str_array[j][0] );
  1323.     }
  1324.  
  1325.     vswr_mode( h, 1 );
  1326. }
  1327.  
  1328.  
  1329. delay( t )
  1330. long t;
  1331. {
  1332.     while( --t ) ;
  1333. }
  1334.  
  1335.  
  1336.         /*--------------  end of FLAGTRIV.C  --------------*/
  1337.